import { BuildEnvironmentOptions } from 'vite'

/**
 * 生成 vite 的 build 库打包配置项配置，默认已有配置：
 * - lib 开启 lib 库打包模式，且打包入口为 `'src/index.ts'`
 * - target 打包结果，默认为 `'modules'`，支持原生 ES 模块、原生 ESM 动态导入和 import.meta 的浏览器
 * - emptyOutDir 打包前清除之前的打包结果
 *
 * @param {BuildEnvironmentOptions} options vite 的 build 库打包配置
 * @returns {BuildEnvironmentOptions} vite 的 build 库打包配置
 */
export const genLibBuildConfig = (options: BuildEnvironmentOptions = {}): BuildEnvironmentOptions => {
  return {
    // 由于要进行的是库的打包，所以这里要指定 lib 选项，使用 lib 模式(库模式)进行打包
    // 该配置并不会真正被使用，因为我们打包实际上使用的是 vite 中的 rollup 打包工具，此配置项只是为了告诉 vite 使用 lib 模式进行打包
    lib: {
      // 打包入口
      entry: 'src/index.ts',
    },
    // 打包结果对于浏览器的兼容性
    // modules：支持原生 ES 模块、原生 ESM 动态导入和 import.meta 的浏览器
    target: 'modules',
    // 清除之前的打包结果
    emptyOutDir: true,
    ...options,
  }
}

export type GenLibBuildConfigType = typeof genLibBuildConfig
